iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
3
AI & Data

爬蟲在手、資料我有 - 30 天 Scrapy 爬蟲實戰系列 第 3

【Day 2】常見的資料格式 (1/3) - CSV

  • 分享至 

  • xImage
  •  

在開始爬資料前,先來認識一下網路上常見的資料格式吧!

CSV 的全名是 Comma Separated Values,顧名思義就是用**逗點(,)**分隔的資料。雖然沒有完整的定義標準,但在資料格式不複雜時,算是個不錯的資料交換格式。Python 有提供標準的模組來操作 CSV 資料,這邊就介紹一些常用到的 API。

因為沒有需要安裝其他依賴,所以這邊可以不用進到虛擬環境中執行。也可以執行一下 pipenv shell 來養成使用虛擬環境的好習慣XD

  • 準備資料

先用 Mockaroo 這個網站來產生一些測試用的假資料,按「Preview」來預覽資料內容,或「Download Data」直接下載檔案。

https://ithelp.ithome.com.tw/upload/images/20190917/20107875TamoRMxhP3.png

下載後存到 mock_data.csv 檔案中,第一列(id, first_name, last_name, gender, country)是表頭(欄位名稱),其他列則是每筆資料的內容。

https://ithelp.ithome.com.tw/upload/images/20190923/201078751mNxzQMpPs.png

執行下列程式碼,可以讀取檔案印在畫面上。

import csv
with open('mock_data.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        print(', '.join(row))

https://ithelp.ithome.com.tw/upload/images/20190923/20107875GSdskGM1Nq.png

執行下列程式碼,可以將資料寫入檔案。

import csv
with open('mock_data.csv', 'a', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow([3, 'Corri', 'Campling', 'Female', 'Sweden'])

https://ithelp.ithome.com.tw/upload/images/20190923/20107875vxI8XgR2vT.png

list 轉換為 dict

前面都是把資料以 list 型態來處理資料,如果欄位的順序有變,程式都要一併修改。但既然都有表頭了,有沒有辦法用 dict 的型態來方便處理呢? 自問自答, 當然有!csv 模組另外提供了 csv.DictReadercsv.DictWriter 來滿足這個需求。

import csv
with open('mock_data.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        print(row['first_name'], row['last_name'])

https://ithelp.ithome.com.tw/upload/images/20190923/20107875J9PNyb2JEI.png

import csv
with open('mock_data.csv', 'a', newline='') as csvfile:
    fieldnames = ['id', 'first_name', 'last_name', 'gender', 'country']
    writer = csv.DictWriter(csvfile, fieldnames, delimiter=',', quotechar='"')
    writer.writerow({
        'id': 4,
        'first_name': 'Salvatore',
        'last_name': 'Gaitskill',
        'gender': 'Male',
        'country': 'Indonesia'
    })

https://ithelp.ithome.com.tw/upload/images/20190923/201078756MDzKEhCLb.png

參考資料


上一篇
【Day 1】環境準備
下一篇
【Day 3】常見的資料格式 (2/3) - JSON
系列文
爬蟲在手、資料我有 - 30 天 Scrapy 爬蟲實戰33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言